package com.example.api.job.logic.impl;

import com.example.api.job.logic.ITestLogic;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @name: TestLogicImpl
 * @description:
 * @author: xw.s
 * @date: 2021/6/25-10:59
 */

/**
 * @Scheduled(fixedRate = 20)//按一定的频率执行的定时任务
 * @Scheduled(fixedDelay = 20)//按一定的频率执行的定时任务，可以陪着initialDelay定义延迟执行时间
 * @Scheduled(cron = "") //配置任务执行时间
 * 秒：0~59                      , - * /
 * 分钟：0~59                  , - * /
 * 小时：0~23                  , - * /
 * 天：0~31 月：0~11               , - * ? / L W
 * 月 1-12 JAN-DEC                        , - * /
 * 周：1~7 也可以使用 SUN-SAT              , - * ? / L #
 * 年：1970~2099                         , - * /
 *
 * *表示所有，放在分上表示每一分都触发
 * ?表示不指定值，使用场景不需要关心该字段
 * -表示区间
 * ,表示多个值
 * /表示递增触发  例如秒5/15表示从5秒开始 没15s触发一次
 * L表示最后，如果是天就是当月的最后一天，如果是周就是周六  如果是数字+L表示给数据的最后一个
 * W表示离指定日期最近的工作日
 * #表示第几个  周6#3表示每月的第三个周六
 *
 * 月份的日期和周互斥，必须设置一个
 * 如何书写： 单值：3  连续区间：3-7  间隔日期：(2-18/4) 列表：(2,4,6,10)
 *
 * 常用示例：
 * 0 0 12 * * ？ 每天12点
 * 0 15 10 ？ * * 每天10:15
 * 0 15 10 * * ？ 每天10:15
 * 0 15 10 * * ？ * 每天10:15
 * 0 15 10 * * ？ 2012 2012年每天10:15
 * 0 * 14 * * ？ 每天14:00-14:59每分钟都触发
 * 0 0/5 14 * * ？ 每天14:00-14:59每隔5分钟都触发
 * 0 0/5 14,18 * * ？ 每天14:00-14:59每隔5分钟都触发  每天18:00-18:59每隔5分钟都触发
 * 0 0-5 14 * * ？ 每天14:00-14:05每分钟都触发
 * 0 10,44 14 ? 3 WED 3月份每周三下午14:10，14:44触发
 * 0 15 10 ? * MON-FRI	从周一到周五每天上午的10点15分触发
 * 0 15 10 15 * ?	每月15号上午10点15分触发
 * 0 15 10 L * ?	每月最后一天的10点15分触发
 * 0 15 10 ? * 6L	每月最后一周的星期五的10点15分触发
 * 0 15 10 ? * 6L 2002-2005	从2002年到2005年每月最后一周的星期五的10点15分触发
 * 0 15 10 ? * 6#3	每月的第三周的星期五开始触发
 * 0 0 12 1/5 * ?	每月的第一个中午开始每隔5天触发一次
 * 0 11 11 11 11 ?	每年的11月11号 11点11分触发(光棍节)
 */
@Component
@Slf4j
public class TestLogicImpl implements ITestLogic {

    /**
     * 这样开启只有一个任务线程
     */

    @Scheduled(cron = "0/5 * * * * *") //配置任务执行时间,每5s执行一次
    public void test1() throws InterruptedException {
        for (int i=0; i < 10; i++){
            log.info(Thread.currentThread().getName() + "-定时任务-这里是test1");
            Thread.sleep(200);
        }
    }

    @Scheduled(fixedRate = 5000) //每5s执行一次
    public void test2() throws InterruptedException {
        for (int i=0; i < 10; i++){
            log.info(Thread.currentThread().getName() + "-定时任务-这里是test2");
            Thread.sleep(200);
        }

    }

    @Scheduled(fixedDelay = 5000) //每5s执行一次
    public void test3() throws InterruptedException {
        for (int i=0; i < 10; i++){
            log.info(Thread.currentThread().getName() + "-定时任务-这里是test3");
            Thread.sleep(200);
        }

    }

}























